昨天我們稍微說明了雲端上k8s運作的基本邏輯,也介紹了一些會用到的AWS元件並做了些前置準備,今天我們從頭開始,一步步把k8s在AWS上的群集建立起來。內容會稍微複雜,所以分成上下兩篇。
上篇的部分:AWS的基礎設置、創建k8s的控制介面(Today)
下篇的部分:kubectl的安裝與設置、登入EC2的工作節點(Tomorrow)
@重要提醒:使用EKS不是免費的,除非你有綁定信用卡的額外預算,不然最好是速速部署測試,一小時約6塊TWD,沒用的時候記得關掉!不然就準備噴錢囉
我們先回到Management Service的介面,尋找cloudformation這個服務

接著Create Stack

接著我們導入一個VPC的template,詳細可參考文檔
---
AWSTemplateFormatVersion: '2010-09-09'
Description: 'AWS EKS'
Parameters:
  VpcBlock:
    Type: String
    Default: 192.168.0.0/16
    Description: CIDR range for VPC
  Subnet01Block:
    Type: String
    Default: 192.168.64.0/18
    Description: CIDR for first subnet within VPC
  Subnet02Block:
    Type: String
    Default: 192.168.128.0/18
    Description: CIDR for second subnet within VPC
  Subnet03Block:
    Type: String
    Default: 192.168.192.0/18
    Description: CIDR for third subnet within VPC
Resources:
  VPC:
    Type: AWS::EC2::VPC
    Properties:
      CidrBlock:  !Ref VpcBlock
      EnableDnsSupport: true
      EnableDnsHostnames: true
      Tags:
      - Key: Name
        Value: !Sub '${AWS::StackName}-VPC'
  InternetGateway:
    Type: "AWS::EC2::InternetGateway"
  VPCGatewayAttachment:
    Type: "AWS::EC2::VPCGatewayAttachment"
    Properties:
      InternetGatewayId: !Ref InternetGateway
      VpcId: !Ref VPC
  RouteTable:
    Type: AWS::EC2::RouteTable
    Properties:
      VpcId: !Ref VPC
      Tags:
      - Key: Name
        Value: Public Subnets
      - Key: Network
        Value: Public
  Route:
    DependsOn: VPCGatewayAttachment
    Type: AWS::EC2::Route
    Properties:
      RouteTableId: !Ref RouteTable
      DestinationCidrBlock: 0.0.0.0/0
      GatewayId: !Ref InternetGateway
  Subnet01:
    Type: AWS::EC2::Subnet
    Properties:
      AvailabilityZone:
        Fn::Select:
        - '0'
        - Fn::GetAZs:
            Ref: AWS::Region
      CidrBlock:
        Ref: Subnet01Block
      VpcId:
        Ref: VPC
      Tags:
      - Key: Name
        Value: !Sub "${AWS::StackName}-Subnet1"
  Subnet02:
    Type: AWS::EC2::Subnet
    Properties:
      AvailabilityZone:
        Fn::Select:
        - '1'
        - Fn::GetAZs:
            Ref: AWS::Region
      CidrBlock:
        Ref: Subnet02Block
      VpcId:
        Ref: VPC
      Tags:
      - Key: Name
        Value: !Sub "${AWS::StackName}-Subnet2"
  Subnet03:
    Type: AWS::EC2::Subnet
    Properties:
      AvailabilityZone:
        Fn::Select:
        - '2'
        - Fn::GetAZs:
            Ref: AWS::Region
      CidrBlock:
        Ref: Subnet03Block
      VpcId:
        Ref: VPC
      Tags:
      - Key: Name
        Value: !Sub "${AWS::StackName}-Subnet3"
  Subnet01RouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref Subnet01
      RouteTableId: !Ref RouteTable
  Subnet02RouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref Subnet02
      RouteTableId: !Ref RouteTable
  Subnet03RouteTableAssociation:
    Type: AWS::EC2::SubnetRouteTableAssociation
    Properties:
      SubnetId: !Ref Subnet03
      RouteTableId: !Ref RouteTable
  ControlPlaneSecurityGroup:
    Type: AWS::EC2::SecurityGroup
    Properties:
      GroupDescription: Cluster communication with worker nodes
      VpcId: !Ref VPC
Outputs:
  SubnetIds:
    Description: your subnets
    Value: !Join [ ",", [ !Ref Subnet01, !Ref Subnet02, !Ref Subnet03 ] ]
  SecurityGroups:
    Description: SecGroup for communication betw controlplane and workernodes
    Value: !Join [ ",", [ !Ref ControlPlaneSecurityGroup ] ]
  VpcId:
    Description: The VPC Id
    Value: !Ref VPC
接著應顯示如下,可以檢視Design去看它的設計拓墣架構,這裡筆者直接下一步

設定名稱EKS-stack,好了下一步

後面都不用改什麼設定,直接下一步到Create Stack就行
再來就是檢視完成介面

會稍微花一點時間,要等它一下,喝口茶,休息一下。(睡個覺再來
好了應該要有類似訊息

檢查Output

OK,看起來沒啥問題,我們接續下個部分
這個部分我們延續前面繼續操作,直接設置
我們先回到Management Service的介面,尋找EKS這個服務,然後到那個頁面後,選擇Clusters

這邊是要我們建立一個新的Cluster,我們先做些設定
主要是把一些我們前面設置過的設定套用,像是EKS開頭的那些東西
設定cluster name、k8s version、role name,目前EKS只支援到1.14,現在最新是1.16,也就是我們之前minikube用的k8s版本

設置VPC及對應的子網域(這個在選定VPC後應會自動套入),它原本就有個預設的VPC,不要選錯了!

設定Security groups,也是找EKS相關的

Security group下面的可以用預設值不調,看個人喜好(筆者沒調,好了按Create

接著AWS就會幫我們建立EKS的cluster了,要等一段時間(這個蠻久的,可以小睡一下

好了會長這樣,筆者大概等了10分左右

OK,到這邊關於創建k8s的控制介面的部分就結束囉!
今天我們已經將k8s架設在AWS實務篇之上卷走過啦!就是AWS的基礎設置、創建k8s的控制介面的內容。到這邊關於EKS的設置已經過了一半了,在下卷的內容,我們會提到關於kubectl的安裝與設置、登入EC2的工作節點等等的內容,AWS雖然一開始用起來眼花撩亂,但久了還是可以習慣(咦,有押韻,走到這邊,筆者會建議先將前面基礎篇、進階篇、管理篇等內容複習一次,因為我們到時候上雲後,會在驗證一部份的前面內容,因為在日常的維運當中,很多時候其實你是在雲端的環境下指令的,本地端的minikube只是給你測試用而已,加油!我們明天見~
本文同步刊載於https://github.com/x1y2z3456/ironman
感謝您撥冗閱讀此文章,不喜勿噴,有任何問題建議歡迎下方留言:)
說個笑話,希望我能寫滿30天啊(笑